package v1

import (
	"SmartLibrary/internal/model"
	"time"
)

type AdminLoginRequest struct {
	UserName string `json:"userName" binding:"required" example:"alan"`
	Password string `json:"password" binding:"required" example:"123456"`
}

type AdminLoginResponseData struct {
	AccessToken string `json:"accessToken"`
}

type AdminGetListsRequest struct {
	Offset    int    `json:"offset"`
	Limit     int    `json:"limit"`
	Condition string `json:"condition"`
	Query     string `json:"query" `
}

// AdminBook 结构体用于表示书籍信息
type AdminBook struct {
	BookId          int       `json:"bookId"`                             // 书籍ID
	BookNumber      int       `json:"bookNumber"`                         // 书籍编号
	BookName        string    `json:"bookName" binding:"required"`        // 书籍名称
	BookAuthor      string    `json:"bookAuthor"  binding:"required"`     // 作者
	BookLibrary     string    `json:"bookLibrary" binding:"required"`     // 所在图书馆
	BookType        string    `json:"bookType" binding:"required"`        // 书籍类型
	BookLocation    string    `json:"bookLocation" binding:"required"`    // 书籍位置
	BookStatus      string    `json:"bookStatus" binding:"required"`      // 书籍状态
	BookDescription string    `json:"bookDescription" binding:"required"` // 书籍描述
	CreateTime      time.Time `json:"createTime"`                         // 创建时间
	UpdateTime      time.Time `json:"updateTime"`                         // 更新时间
}

// AdminPutBook 结构体用于表修改书籍信息
type AdminPutBook struct {
	BookId          int       `json:"bookId"`                             // 书籍ID
	BookNumber      int       `json:"bookNumber" binding:"required"`      // 书籍编号
	BookName        string    `json:"bookName" binding:"required"`        // 书籍名称
	BookAuthor      string    `json:"bookAuthor"  binding:"required"`     // 作者
	BookLibrary     string    `json:"bookLibrary" binding:"required"`     // 所在图书馆
	BookType        string    `json:"bookType" binding:"required"`        // 书籍类型
	BookLocation    string    `json:"bookLocation" binding:"required"`    // 书籍位置
	BookStatus      string    `json:"bookStatus" binding:"required"`      // 书籍状态
	BookDescription string    `json:"bookDescription" binding:"required"` // 书籍描述
	CreateTime      time.Time `json:"createTime"`                         // 创建时间
	UpdateTime      time.Time `json:"updateTime"`                         // 更新时间
}

// AdminBookListResponse 获取多个书籍信息的结构体
type AdminBookListResponse struct {
	Records          []model.AdminBooks `json:"records"`          // 记录列表，包含多个书籍信息
	Total            int                `json:"total"`            // 总数，记录的总数
	Size             int                `json:"size"`             // 大小，每页记录的数量
	Current          int                `json:"current"`          // 当前页码
	Orders           []interface{}      `json:"orders"`           // 排序信息
	OptimizeCountSql bool               `json:"optimizeCountSql"` // 是否优化计数 SQL
	SearchCount      bool               `json:"searchCount"`      // 是否搜索计数
	CountId          interface{}        `json:"countId"`          // 计数 ID
	MaxLimit         interface{}        `json:"maxLimit"`         // 最大限制
	Pages            int                `json:"pages"`            // 页数，总页数
}

// AdminBookTypeListResponse 获取多个用户信息的结构体
type AdminBookTypeListResponse struct {
	Records          []model.AdminBookType `json:"records"`          // 记录列表，包含多个用户信息
	Total            int                   `json:"total"`            // 总数，记录的总数
	Size             int                   `json:"size"`             // 大小，每页记录的数量
	Current          int                   `json:"current"`          // 当前页码
	Orders           []interface{}         `json:"orders"`           // 排序信息
	OptimizeCountSql bool                  `json:"optimizeCountSql"` // 是否优化计数 SQL
	SearchCount      bool                  `json:"searchCount"`      // 是否搜索计数
	CountId          interface{}           `json:"countId"`          // 计数 ID
	MaxLimit         interface{}           `json:"maxLimit"`         // 最大限制
	Pages            int                   `json:"pages"`            // 页数，总页数
}

// AdminLibraryCardListResponse 获取多个用户信息的结构体
type AdminLibraryCardListResponse struct {
	Records          []model.AdminUsers `json:"records"`          // 记录列表，包含多个用户信息
	Total            int                `json:"total"`            // 总数，记录的总数
	Size             int                `json:"size"`             // 大小，每页记录的数量
	Current          int                `json:"current"`          // 当前页码
	Orders           []interface{}      `json:"orders"`           // 排序信息
	OptimizeCountSql bool               `json:"optimizeCountSql"` // 是否优化计数 SQL
	SearchCount      bool               `json:"searchCount"`      // 是否搜索计数
	CountId          interface{}        `json:"countId"`          // 计数 ID
	MaxLimit         interface{}        `json:"maxLimit"`         // 最大限制
	Pages            int                `json:"pages"`            // 页数，总页数
}

// AdminBookBorrowsListResponse 获取多个借阅信息的结构体
type AdminBookBorrowsListResponse struct {
	Records          []model.AdminBooksBorrow `json:"records"`          // 记录列表，包含多个书籍借阅信息
	Total            int                      `json:"total"`            // 总数，记录的总数
	Size             int                      `json:"size"`             // 大小，每页记录的数量
	Current          int                      `json:"current"`          // 当前页码
	Orders           []interface{}            `json:"orders"`           // 排序信息
	OptimizeCountSql bool                     `json:"optimizeCountSql"` // 是否优化计数 SQL
	SearchCount      bool                     `json:"searchCount"`      // 是否搜索计数
	CountId          interface{}              `json:"countId"`          // 计数 ID
	MaxLimit         interface{}              `json:"maxLimit"`         // 最大限制
	Pages            int                      `json:"pages"`            // 页数，总页数
}

// AdminBookBorrowRulesListResponse 获取多个借阅规则信息的结构体
type AdminBookBorrowRulesListResponse struct {
	Records          []model.AdminBookRule `json:"records"`          // 记录列表，包含多个书籍借阅规则信息
	Total            int                   `json:"total"`            // 总数，记录的总数
	Size             int                   `json:"size"`             // 大小，每页记录的数量
	Current          int                   `json:"current"`          // 当前页码
	Orders           []interface{}         `json:"orders"`           // 排序信息
	OptimizeCountSql bool                  `json:"optimizeCountSql"` // 是否优化计数 SQL
	SearchCount      bool                  `json:"searchCount"`      // 是否搜索计数
	CountId          interface{}           `json:"countId"`          // 计数 ID
	MaxLimit         interface{}           `json:"maxLimit"`         // 最大限制
	Pages            int                   `json:"pages"`            // 页数，总页数
}

// AdminBookAdminsListResponse 获取多个图书管理员信息的结构体
type AdminBookAdminsListResponse struct {
	Records          []model.AdminBookAdmins `json:"records"`          // 记录列表,包含多个图书管理员信息
	Total            int                     `json:"total"`            // 总数，记录的总数
	Size             int                     `json:"size"`             // 大小，每页记录的数量
	Current          int                     `json:"current"`          // 当前页码
	Orders           []interface{}           `json:"orders"`           // 排序信息
	OptimizeCountSql bool                    `json:"optimizeCountSql"` // 是否优化计数 SQL
	SearchCount      bool                    `json:"searchCount"`      // 是否搜索计数
	CountId          interface{}             `json:"countId"`          // 计数 ID
	MaxLimit         interface{}             `json:"maxLimit"`         // 最大限制
	Pages            int                     `json:"pages"`            // 页数，总页数
}

// AdminBookTypeResponse 图书类别
type AdminBookTypeResponse struct {
	TypeID   int    `gorm:"column:type_id;primary_key;AUTO_INCREMENT"` // 图书类别唯一标识
	TypeName string `gorm:"column:type_name;NOT NULL"`                 // 借阅类别的昵称
}

// AdminBookTypeRequest 图书类别
type AdminBookTypeRequest struct {
	TypeID      int    `json:"typeId"`
	TypeName    string `json:"typeName"`
	TypeContent string `json:"typeContent"`
}

// AdminLibraryCardRequest 用户
type AdminLibraryCardRequest struct {
	UserName   string `json:"userName" binding:"required" example:"alan"`
	Password   string `json:"password" binding:"required" example:"123456"`
	CardName   string `json:"cardName" binding:"" example:"alan"`
	CardNumber int64  `json:"cardNumber" binding:"" example:"123456789"`
	RuleNumber int    `json:"ruleNumber" binding:"required" example:"10"`
	UserStatus *int   `json:"userStatus" binding:"required"`
}

// AdminLibraryPutCardRequest 用户
type AdminLibraryPutCardRequest struct {
	UserId     int    `json:"userId" binding:"required" example:"1342"`
	UserName   string `json:"userName" binding:"required" example:"alan"`
	Password   string `json:"password" binding:"required" example:"123456"`
	RuleNumber int    `json:"ruleNumber" binding:"required" example:"10"`
	UserStatus *int   `json:"userStatus" binding:"required" example:"1"`
}

// AdminLibraryPutCardRuleNumberRequest 修改用户规则id
type AdminLibraryPutCardRuleNumberRequest struct {
	UserId     int `json:"userId" binding:"required" example:"1342"`
	RuleNumber int `json:"ruleNumber" binding:"required" example:"10"`
}

// AdminBookBorrowRulesRequest 借阅规则
type AdminBookBorrowRulesRequest struct {
	BookRuleId       int     `json:"bookRuleId" binding:"required" example:"188"`
	BookLimitDays    int     `json:"bookLimitDays" binding:"required" example:"10"`
	BookLimitNumber  int     `json:"bookLimitNumber" binding:"required" example:"10"`
	BookOverdueFee   float64 `json:"bookOverdueFee" binding:"required" example:"10.00"`
	BookLimitLibrary string  `json:"bookLimitLibrary" binding:"required" example:"10"`
}

// AdminPutBookBorrowRulesRequest 借阅规则
type AdminPutBookBorrowRulesRequest struct {
	RuleId           int     `json:"ruleId" binding:"required"`
	BookRuleId       int     `json:"bookRuleId" binding:"required" example:"1342"`
	BookLimitDays    int     `json:"bookLimitDays" binding:"required" example:"10"`
	BookLimitNumber  int     `json:"bookLimitNumber" binding:"required" example:"10"`
	BookOverdueFee   float64 `json:"bookOverdueFee" binding:"required" example:"10.00"`
	BookLimitLibrary string  `json:"bookLimitLibrary" binding:"required" example:"10"`
}

// AdminBookAdminRequest 图书管理员
type AdminBookAdminRequest struct {
	BookAdminName string `json:"bookAdminName" binding:"required"`
	UserName      string `json:"userName" binding:"required"`
	Password      string `json:"password" binding:"required"`
	Email         string `json:"email" binding:"required"`
}

// AdminPutBookAdminRequest 图书管理员
type AdminPutBookAdminRequest struct {
	BookAdminId   int    `json:"bookAdminId" binding:"required"`
	BookAdminName string `json:"bookAdminName" binding:"required"`
	UserName      string `json:"userName" binding:"required"`
	Password      string `json:"password" binding:"required"`
	Email         string `json:"email" binding:"required"`
}

// AdminRegisterRequest 注册请求
type AdminRegisterRequest struct {
	UserName string `json:"userName" binding:"required" example:"alan"`
	Password string `json:"password" binding:"required" example:"123456"`
}

// AdminBorrowData 借阅数据
type AdminBorrowData struct {
	BorrowDates  []string `json:"borrowDates"`
	BorrowNumber []int    `json:"borrowNumber"`
}

// AdminBookTypeData 书本类型统计
type AdminBookTypeData struct {
	BorrowType    string `json:"borrowType"`
	BorrowNumbers int    `json:"borrowNumber"`
}

// AdminDeleteBooksRequest user_id 切片
type AdminDeleteBooksRequest struct {
	BookIds []int `json:"bookIds"`
}

// AdminBorrowTypeData 借阅类型统计
type AdminBorrowTypeData struct {
	BorrowType    string `json:"name"`
	BorrowNumbers int    `json:"value"`
}
